package wodegua.d31_java高级.d3_annotation;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

/**
 * 解析注解的案例
 * 解析注解的案例，具体需求如下:
 * ① 定义注解MyTest3，要求如
 *      》包含属性:String value()
 *      >包含属性:double aaa()，默认值为 100
 *      >包含属性:String[] bbb()
 *      》限制注解使用的位置:类和成员方法上
 *      》指定注解的有效范围:一直到运行时
 * ②定义一个类叫:Demo，在类中定义一个test1方法，并在该类和其方法上使用MyTest3注解
 * ③ 定义AnnotationTest3测试类，解析Demo类中的全部注解
 */
public class AnnotationTest3 {
    public static void main(String[] args) throws Exception {
        Class c = Demo.class;
        Annotation[] a = c.getDeclaredAnnotations();

        if (c.isAnnotationPresent(MyTest3.class)) {
            MyTest3 a1 = (MyTest3) c.getDeclaredAnnotation(MyTest3.class);
            System.out.println(a1.value());
        } else {
            System.out.println("类上没有该注解");
        }

        Method m = c.getDeclaredMethod("test1");
        if (m.isAnnotationPresent(MyTest3.class)) {
            MyTest3 m1 = (MyTest3) m.getDeclaredAnnotation(MyTest3.class);
            System.out.println(m1.value());
        } else {
            System.out.println("方法上没有该注解");
        }
    }
}
